// 练习1：使用fp.add(x,y)和fp.map(f,x)创建一个能让functor里的值增加的函数ex1
const fp = require('lodash/fp')
const { Maybe, Container } = require('./support')
let maybe = Maybe.of([5,6,1])
// 实现
let ex1 = () => {
    maybe.map(x=>fp.map(fp.add(1),x))
    // console.log(maybe.map(x=>fp.map(fp.add(1),x)));
}
ex1();



// 练习2：实现一个函数ex2，能够使用fp.first获取列表的第一个元素
let xs = Container.of(['do','ray','me','fa','so','la','ti','do'])
// 实现
let ex2 = () => {
    xs.map(x=>fp.first(x))
    // console.log(xs.map(x => fp.first(x)));
}
ex2();



// 练习3：实现一个函数ex3，使用safeProp和fp.first找到user的名字的首字母
let safeProp = fp.curry(function(x,o){
    return Maybe.of(o[x]) 
})
let user = { 'id': 2, 'name': 'Albert' }
// 实现
let ex3 = () => {
    let userFirst = fp.flowRight( fp.map(fp.first) , safeProp('name') )
    // console.log(userFirst(user));
}
ex3();



// 练习4：使用Maybe重写ex4，不要有if语句
// let ex4 = (n) => {
//     if (n) {
//         return parseInt(n) 
//     }
// }

// 改写
let ex4 = (n) => {
    Maybe.of(n).map(x=>parseInt(x))
    console.log(Maybe.of(n).map(x => parseInt(x)));
}
ex4('5');


